iT邦幫忙

2026 iThome 鐵人賽

DAY 11
0

今天要來介紹TypeScript(TS)的特殊型別~包含之前幾篇短暫提到的voidnever
今天要來介紹的型別有:

  • any
  • unknown
  • void
  • never

1. any

因為 any 會讓TS暫時放棄對這個值的型別檢查,因此它可以被賦予不同型別的值。像是前面提到的函式、物件也能夠被any賦值。any的特性讓TS在型別檢查時,any的特性讓TS在型別檢查時,會跳過與這個值相關的型別檢查,因此很多原本應該被發現的型別錯誤也不會被TS提醒。

//any範例:
let a: any = 0; //此時變數a為number
a = "banana"; //因為型別是any,即便重新賦值變成string型別,TS也不會報錯喔!

但老實說,你都特地學TypeScript了,一大特色的型別檢查讓我們在debug的時候更有效率,現在出現一個無視型別檢查,幾乎等同於外掛,繞著檢查走的型別是很方便沒錯,但這不就失去型別檢查的意義了嗎?我是建議any能少用就少用,不然程式哪裡寫錯,還要自己一行一行重新檢查,也太麻煩了。

既然都說any要少用了,那甚麼時候真的會用到它呢?
	通常是在需要與舊有 JavaScript 程式碼整合,或某些第三方套件缺少型別資訊時,才可能暫
	時使用 `any`。

2. unknown

unknown是個和any很相似的型別,一樣可以兼容很多型別,差別在於any 會讓TS放棄型別檢查,但 unknown 在使用它的方法或屬性之前,必須先確認它的型別。

//unknown範例:(錯誤版本)
let b: unknown = "apple";
b.toUpperCase(); //因為無法確認型別,TS會直接報錯

//unknown範例:(正確版本)
//如何讓unknown意識到型別是正確的呢?
//使用typeof,推導出b的型別目前是字串
if (typeof b === "string") {
    console.log(b.toUpperCase()); //雖然有點麻煩,但這樣就不會報錯了!
}

雖然在編撰上,unknownany更麻煩,但更為嚴謹,也是大家比較推薦的寫法。至於typeof是什麼?我們日後也會介紹到喔!

3. void

在前兩天介紹函式時,我有稍微提及到的void,這邊就來重新正式介紹一下它吧!
void 常用在函式的回傳型別上,表示這個函式的回傳值不會被拿來使用。

//void範例:
function c(): void {
    console.log("Good Morning!");
} //void常用在函式的回傳型別上,表示這個函式的回傳值不會被拿來使用。

4.never

之前在介紹交叉型別時,也有小小提到never型別,在我沒有放棄斷更的前提下,它終於成為今天的壓軸主角!嗚呼!
never在英文裡就有「 決不、從來沒有」的意思,是語氣很強烈的否定詞。在TS裡,never表示不會出現的值。用在函式上時,代表這個函式永遠不會正常結束,因此不會產生可以正常取得的回傳值。

//never範例:
//情境1:拋出錯誤,強行中斷程式
function d(msg: string): never {
    throw new Error(msg); 
} //執行到 `throw` 時,函式會立即停止正常執行,並將錯誤往外拋出

//情境2:無窮迴圈
function e(): never {
    while (true) {
        console.log("執行到天荒地老");
    }
} //因為函式進入了無限迴圈,不會正常結束,永遠被困在這個迴圈中,也不會回傳值

小結

今天將4個特殊型別都介紹完了,可能有些人還搞不懂anyunknown的差別、voidnever對於回傳值的差別,因此這邊做了統整給大家參考:

any unknown void never
概念 會讓TS跳過相關的型別檢查 任何型別的值都可以賦值給它,但使用方法或屬性前要先確認型別 函式通常會正常結束,回傳值不會被使用 函式不會正常結束,因此不會產生可正常取得的回傳值
型別檢查? TypeScript會跳過相關型別檢查 使用前需要,事前檢查不易出錯,稍微麻煩點 / /
常見用途 與舊有JavaScript程式碼整合、第三方套件缺少型別資訊時暫時使用 不確定型別的時候,比any安全,建議用這個 函式沒有回傳值 不斷拋出錯誤例外、無限迴圈時使用

以上就是今天的內容啦!各位明天見囉!大家拜拜~~~


上一篇
[Day-10] 函式(function)-2
下一篇
[Day-12]型別斷言(Type Assertion)
系列文
從零開始學習TypeScript:菜鳥的入門介紹與概覽22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言